package yaner.hotel.manager.resource.mapper.impl;

import cn.hutool.crypto.digest.DigestUtil;
import org.springframework.stereotype.Component;
import yaner.hotel.manager.common.constant.Constants;
import yaner.hotel.manager.common.dto.user.UserAddDto;
import yaner.hotel.manager.common.dto.user.UserUpdateDto;
import yaner.hotel.manager.common.utils.SnowUtils;
import yaner.hotel.manager.common.vo.UserVo;
import yaner.hotel.manager.resource.entity.User;
import yaner.hotel.manager.resource.mapper.IUserMapper;

import java.util.Date;
import java.util.Objects;

@Component
public class UserMapperImpl implements IUserMapper {
    @Override
    public UserVo toVo(User user) {
        if (Objects.isNull(user)) {
            return null;
        }
        return UserVo.builder()
                .userId(user.getUserId())
                .userName(user.getUserName())
                .account(user.getAccount())
                .phone(user.getPhone())
                .email(user.getEmail())
                .password(user.getPassword())
                .dateOfBirth(user.getDateOfBirth())
                .motto(user.getMotto())
                .logoPic(user.getLogoPic())
                .status(user.getStatus())
                .loginStatus(user.getLoginStatus())
                .createTime(user.getCreateTime())
                .updateTime(user.getUpdateTime())
                .build();
    }


    @Override
    public User toAddEntity(UserAddDto roleAddDto) {
        if (Objects.isNull(roleAddDto)) {
            return null;
        }
        String md5Hex = DigestUtil.md5Hex(Constants.INIT_PASSWORD);
        return User.builder()
                .userId(SnowUtils.nextId())
                .userName(roleAddDto.getUserName())
                .account(roleAddDto.getAccount())
                .phone(roleAddDto.getPhone())
                .email(roleAddDto.getEmail())
                .dateOfBirth(roleAddDto.getDateOfBirth())
                .motto(roleAddDto.getMotto())
                .logoPic(roleAddDto.getLogoPic())
                .password(md5Hex)
                .status("1")
                .loginStatus("0")
                .createTime(new Date())
                .updateTime(new Date())
                .build();
    }

    @Override
    public User toUpdateEntity(UserUpdateDto userUpdateDto) {
        if (Objects.isNull(userUpdateDto)) {
            return null;
        }
        return User.builder()
                .userId(userUpdateDto.getUserId())
                .userName(userUpdateDto.getUserName())
                .account(userUpdateDto.getAccount())
                .password(userUpdateDto.getPassword())
                .phone(userUpdateDto.getPhone())
                .email(userUpdateDto.getEmail())
                .dateOfBirth(userUpdateDto.getDateOfBirth())
                .motto(userUpdateDto.getMotto())
                .logoPic(userUpdateDto.getLogoPic())
                .status(userUpdateDto.getStatus())
                .updateTime(new Date())
                .build();
    }
}
